package sad.visao;

import java.awt.event.ActionListener;
import java.awt.event.WindowListener;
import javax.swing.UIManager;
import javax.swing.event.MenuListener;
import sad.util.Constantes;
import sad.util.DAOEvent;

public final class SadGUI extends javax.swing.JFrame implements Teste {
// Instancia da classe SuporteEventos responsavel observar as ações e disparar os eventos
    SuporteEventos suporteEventos = new SuporteEventos(this);

    public SadGUI() {
        try {
            //o metodo abaixo serve para deixar os formularios com uma aparencia do windows! 
          UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); //Windows
        } catch (Exception e) {
          System.out.printf("Erro ao Alterar Visual: %s",e);
        }
        initComponents();
        addOuvintes();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToolBar1 = new javax.swing.JToolBar();
        btProfessor = new javax.swing.JButton();
        btDisciplina = new javax.swing.JButton();
        btArqDisc = new javax.swing.JButton();
        btArqProf = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        professor = new javax.swing.JMenu();
        novoProfessor = new javax.swing.JMenuItem();
        disciplina = new javax.swing.JMenu();
        novaDisciplina = new javax.swing.JMenuItem();
        topico = new javax.swing.JMenu();
        novoTopico = new javax.swing.JMenuItem();
        subTopico = new javax.swing.JMenu();
        novoSubTopico = new javax.swing.JMenuItem();
        avaliacao = new javax.swing.JMenu();
        novaAvialacao = new javax.swing.JMenuItem();
        questao = new javax.swing.JMenu();
        novaQuestao = new javax.swing.JMenuItem();
        relatorio = new javax.swing.JMenu();
        prof = new javax.swing.JMenuItem();
        disc = new javax.swing.JMenuItem();
        top = new javax.swing.JMenuItem();
        subtop = new javax.swing.JMenuItem();
        quest = new javax.swing.JMenuItem();
        sair = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Sistema de Geração de Provas");

        jToolBar1.setRollover(true);
        jToolBar1.setAutoscrolls(true);

        btProfessor.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sad/util/imagens/addProf2.png"))); // NOI18N
        btProfessor.setActionCommand("Novo Professor");
        btProfessor.setFocusable(false);
        btProfessor.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btProfessor.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btProfessor);

        btDisciplina.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sad/util/imagens/addDisc1.png"))); // NOI18N
        btDisciplina.setActionCommand("Nova Disciplina");
        btDisciplina.setEnabled(false);
        btDisciplina.setFocusable(false);
        btDisciplina.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btDisciplina.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btDisciplina);

        btArqDisc.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sad/util/imagens/arq3.png"))); // NOI18N
        btArqDisc.setActionCommand("Relatorio Disciplina");
        btArqDisc.setFocusable(false);
        btArqDisc.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btArqDisc.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btArqDisc);

        btArqProf.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sad/util/imagens/addProf1a.png"))); // NOI18N
        btArqProf.setActionCommand("Relatorio Professor");
        btArqProf.setFocusable(false);
        btArqProf.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btArqProf.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btArqProf);

        professor.setText("Professor");

        novoProfessor.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sad/util/imagens/addProf2Mini.png"))); // NOI18N
        novoProfessor.setText("Novo ...");
        novoProfessor.setActionCommand("Novo Professor");
        professor.add(novoProfessor);

        jMenuBar1.add(professor);

        disciplina.setText("Disciplina");
        disciplina.setEnabled(false);

        novaDisciplina.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sad/util/imagens/addDisc1Mini.png"))); // NOI18N
        novaDisciplina.setText("Nova ...");
        novaDisciplina.setActionCommand("Nova Disciplina");
        disciplina.add(novaDisciplina);

        jMenuBar1.add(disciplina);

        topico.setText("Topico");
        topico.setEnabled(false);

        novoTopico.setText("Novo...");
        novoTopico.setActionCommand("Novo Topico");
        topico.add(novoTopico);

        jMenuBar1.add(topico);

        subTopico.setText("Sub Tópico");
        subTopico.setEnabled(false);

        novoSubTopico.setText("Novo...");
        novoSubTopico.setActionCommand("Novo Sub Topico");
        subTopico.add(novoSubTopico);

        jMenuBar1.add(subTopico);

        avaliacao.setEnabled(false);
        avaliacao.setLabel("Avaliação");

        novaAvialacao.setText("Nova...");
        novaAvialacao.setActionCommand("Nova Avaliação");
        avaliacao.add(novaAvialacao);

        jMenuBar1.add(avaliacao);

        questao.setText("Questão");
        questao.setEnabled(false);

        novaQuestao.setText("Nova ...");
        novaQuestao.setActionCommand("Nova Questao");
        questao.add(novaQuestao);
        novaQuestao.getAccessibleContext().setAccessibleName("Nova Questao");

        jMenuBar1.add(questao);

        relatorio.setText("Relatorio");

        prof.setText("Professor");
        prof.setActionCommand("Relatorio Professor");
        relatorio.add(prof);

        disc.setText("Disciplina");
        disc.setActionCommand("Relatorio Disciplina");
        relatorio.add(disc);

        top.setText("Tópicos");
        top.setActionCommand("Relatorio Topico");
        relatorio.add(top);

        subtop.setText("Sub Tópico");
        subtop.setActionCommand("Relatorio Sub Topico");
        relatorio.add(subtop);

        quest.setText("Questão");
        quest.setActionCommand("Relatorio Questao");
        relatorio.add(quest);

        jMenuBar1.add(relatorio);

        sair.setText("Sair");
        jMenuBar1.add(sair);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 940, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(503, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents
//Não era para existir esses JDialogs (cadAvaliacao, cadDisciplina, cadProfessor, cadQuestao
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenu avaliacao;
    private javax.swing.JButton btArqDisc;
    private javax.swing.JButton btArqProf;
    private javax.swing.JButton btDisciplina;
    private javax.swing.JButton btProfessor;
    private javax.swing.JMenuItem disc;
    private javax.swing.JMenu disciplina;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JMenuItem novaAvialacao;
    private javax.swing.JMenuItem novaDisciplina;
    private javax.swing.JMenuItem novaQuestao;
    private javax.swing.JMenuItem novoProfessor;
    private javax.swing.JMenuItem novoSubTopico;
    private javax.swing.JMenuItem novoTopico;
    private javax.swing.JMenuItem prof;
    private javax.swing.JMenu professor;
    private javax.swing.JMenuItem quest;
    private javax.swing.JMenu questao;
    private javax.swing.JMenu relatorio;
    private javax.swing.JMenu sair;
    private javax.swing.JMenu subTopico;
    private javax.swing.JMenuItem subtop;
    private javax.swing.JMenuItem top;
    private javax.swing.JMenu topico;
    // End of variables declaration//GEN-END:variables

    @Override
    public void addOuvintes() {
        /*Para executar qualquer evento no formulario,
          é preciso add os ouvintes, abaixo cada objeto que ira disparar algum evento
          executa o metodo addActionListener que faz com que o objeto suporteEventos,
          instanciado no inicio desta classe, possa ficar escutando as ações deste objeto*/ 
        novaAvialacao.addActionListener(suporteEventos);
        novaQuestao.addActionListener(suporteEventos);
        novaDisciplina.addActionListener(suporteEventos);
        novoTopico.addActionListener(suporteEventos);
        novoSubTopico.addActionListener(suporteEventos);
        novoProfessor.addActionListener(suporteEventos);
        prof.addActionListener(suporteEventos);
        disc.addActionListener(suporteEventos);
        top.addActionListener(suporteEventos);
        subtop.addActionListener(suporteEventos);
        quest.addActionListener(suporteEventos);
        btProfessor.addActionListener(suporteEventos);
        btDisciplina.addActionListener(suporteEventos);
        btArqDisc.addActionListener(suporteEventos);
        btArqProf.addActionListener(suporteEventos);
        // para que o obj suporteEventos escute a ação da janele em si, é executado o metodo abaixo
        this.addWindowListener(suporteEventos);
        // para que o obj suporteEventos escute a ação dos menus, é executado o metodo abaixo
        sair.addMenuListener(suporteEventos);
    }
   // kra isso aqui ta me parencendo redundancia!!! são necessários para 
    @Override
    public void addActionListener(ActionListener l) {
        suporteEventos.addActionOuvinte(l);
    }

    @Override
    public void addWindowOuvinte(WindowListener l){
        suporteEventos.addWindowOuvinte(l);
    }

    public void addMenuOuvinte(MenuListener aThis) {
        suporteEventos.addMenuOuvinte(aThis);
    }

    @Override
    public void removeActionListener(ActionListener l) {
        
    }

    @Override
    public void modelDAOChange(DAOEvent evt) {
        switch(evt.getID()){
           case DAOEvent.DAO_FIRST:
                enableMenu(evt.getSource().toString());
                break;
           case DAOEvent.DAO_NULL:
                desabilitarMenu(evt.getSource().toString());
                break;
        }
    }

    @Override
    public void setEditableDados(Object[] d) {
        
    }

    @Override
    public void close() {
        System.exit(0);
    }

    public void enableMenu(String menu) {
        if(menu.equals(Constantes.DISCIPLINA)){
            disciplina.setEnabled(true);
            btDisciplina.setEnabled(true);
        }else if(menu.equals(Constantes.TOPICO)){
            topico.setEnabled(true);
        }else if(menu.equals(Constantes.SUBTOPICO)){
            subTopico.setEnabled(true);
        }else if(menu.equals(Constantes.AVALIACAO)){
            avaliacao.setEnabled(true);
            questao.setEnabled(true);
        }
    }
    public void desabilitarMenu(String menu){
        if (menu.equals(Constantes.DISCIPLINA)) {
            disciplina.setEnabled(false);
            btDisciplina.setEnabled(false);
        } else if(menu.equals(Constantes.TOPICO)){
            topico.setEnabled(false);
        } else if(menu.equals(Constantes.SUBTOPICO)){
            subTopico.setEnabled(false);
        } else if(menu.equals(Constantes.AVALIACAO)){
            avaliacao.setEnabled(false);
        }
    }
}
/*Considerações Finais
 Essa classe cria um objeto chamado suporteEventos para ficar escutando tanto essa classe
 como as demais. Mas para que o suporteEventos fique escutanto ele precisa executar o 
 metodo addActionListener, porem no decorrer da pagina, pelo o que eu percebi ocorre
 tipo uma redundancia na utilização dos metodos, ou então eu n entendi direito!!!
 Mas pelo q eu entendi, da p enxugar essa classe e torna-la mais compreensivel!!!*/